package com.lfb.IO;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class StreamIOTestDriver {
    public static void main(String[] args) {
        test01();
    }

    /**
     * 字节流的应用：文件输入流
     */
    private static void test01(){
        try {
            // 创建一个文件输入流对象
            FileInputStream fis = new FileInputStream("D:\\temp\\iotest\\filein01.txt");
            // 创建一个文件输出流对象
            // 注意：第二个参数默认是false，表示每次从文件的开头开始写入内容，也就是覆盖写；
            //       如果第二个参数是true，表示每次从文件的末尾开始写，也就是末尾追加写；
            FileOutputStream fos = new FileOutputStream("D:\\temp\\iotest\\filein01_out.txt",true);

            // 创建一个读取文件输入流中的流数据的容器数组
            byte[] bytes = new byte[1024];
            // 将文件流对象中的内容读取到程序中
            int len = fis.read(bytes);
            // 判断是否读取到文件末尾
            while(len != -1){
                // 输出读取的内容
                String strLine = new String(bytes,"GBK");
                System.out.println(strLine);
                // 使用文件输出流对象，将内容写出到指定文件中
                fos.write(bytes,0,len);

                // 重新清理读取的容器数组
                bytes = new byte[1024];
                // 继续向下读取内容
                len = fis.read(bytes);
            }
            // 文件输出流写完之后，在文件默认追加一个换行符；
            fos.write("\n".getBytes());

            // 关闭资源
            // 也可以写在finally部分进行资源回收
            if(fis != null) {
                fis.close();
            }
            // 清空输出流
            if (fos !=null) {
                fos.flush();
                fos.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
